// 导入export暴露的接口
// 导入export default暴露的默认接口，两种导入方式实际都是为default设置别名
// 同时导入export暴露的接口和export default暴露的默认接口
// 整体导入模块并通过*指定代表整个模块的对象，导入模块的内容全部存于该对象的属性中，同样遵循模块内容只读，即该对象的所有属性只读
import defaultObj, * as exportAll from './export.js';
import {attrAs as attrAsAs, cls, default as defaultAs, func} from './export.js';
// 导入模块但不执行任何内容
import './export.js';

console.log(attrAsAs, func('import'), new cls('import')); // attr func import cls { cls: 'import' }

console.log(defaultObj === defaultAs); // true

console.log(exportAll); // {attrAs: …, func: …, cls: …, default: {attr: …, func: …}}


// *多次重复执行同一import语句或多次import同一模块时该模块只被执行一次，上述代码中export.js模块只被加载一次


/* 受IDEA自动格式化的影响，原内容如下

// 导入export暴露的接口
import {attrAs as attrAsAs, cls, func} from './export.js';
console.log(attrAsAs, func('import'), new cls('import')); // attr func import cls { cls: 'import' }

// 导入export default暴露的默认接口，两种导入方式实际都是为default设置别名
import defaultObj,{default as defaultAs} from './export.js'
console.log(defaultObj === defaultAs); // true

// 同时导入export暴露的接口和export default暴露的默认接口
import defaultObj, {default as defaultAs, attrAs as attrAsAs, cls, func} from './export.js';

// 整体导入模块并通过*指定代表整个模块的对象，导入模块的内容全部存于该对象的属性中，同样遵循模块内容只读，即该对象的所有属性只读
import * as exportAll from './export.js';
console.log(exportAll); // {attrAs: …, func: …, cls: …, default: {attr: …, func: …}}

// 导入模块但不执行任何内容
import './export.js';


// *多次重复执行同一import语句或多次import同一模块时该模块只被执行一次，上述代码中export.js模块只被加载一次 */